/*
 * @Descripttion:
 * @LastEditors: xzh
 * @LastEditTime: 2023-10-15 23:52:48
 */

import type { object_Inf } from "@/utils/typings/index.type";

/**
 * @Author: xzh
 * @Descripttion:props传入参数(https://vxetable.cn/#/table/api)
 * @Param:
 */
export interface propsParam_Inf {
  key?: string;
  moduleToolCode?: string; //模块code
  border?: boolean; //列是否需要边框
  evnCode?: string; //表格用户配置code
  loading: boolean; //是否加载
  checkbox?: boolean; //是否启用多选
  radio?: boolean; //是否启用单选
  className?: string; //对象类名(开启对象新增&&工具栏类型&&条件筛选)
  maxHeight?: number; //表格的最大高度
  scrollLoading?: boolean; //是否启用下拉下载
  tableData?: Array<object_Inf>; //表格数据源
  tableToolArr?: Array<tableTool_Inf>; //表格工具栏按钮
  tableHeadParam?: tableHeadParam_Inf; //表头参数
  tableRecords?: number; //表格数据总数-(数量>0自动启用分页)
  mouseConfig?: mouseConfig_Inf; //鼠标配置项
  rowConfig?: rowConfig_Inf; //行配置信息
  editConfig?: editConfig_Inf; //	可编辑配置项
  treeConfig?: treeConfig_Inf; //树形结构配置项
  checkboxConfig?: checkboxConfig_Inf; //复选框配置项
  radioConfig?: radioConfig_Inf; //单选框配置项
  scrollY?: object_Inf; //纵向虚拟滚动配置
  scrollX?: object_Inf; //横向虚拟滚动配置
  emitEvents?: emitEvents_Inf | object_Inf; //回调事件集
  selectObjArr?: Array<object_Inf>; //表格已选对象
  notNeedNumber?: boolean; //不需要序号
  notShowOverflow?: boolean; //超出不显示省略号
  bottomUp?: boolean; //自下而上布局
  isPagination?: boolean | null; //是否开启分页（不传根据表格数据自动开启分页）
  pageLayouts?: Array<string>; //分页工具类
  keepSource?: boolean; //保持原始值的状态，被某些功能所依赖，比如编辑状态、还原数据等（开启后影响性能，具体取决于数据量
  editRules?: object_Inf; //校验规则配置项
  spanMethod?: Function; //列合并方法
}

/**
 * @Author: xzh
 * @Descripttion:表头参数接口
 * @Param:
 */
export interface tableHeadParam_Inf {
  attrArr: Array<tableHeadAttr_Inf>; //表头动态字段
  filterFixHead?: boolean | Array<string>; //排除的固定对象字段
}

/**
 * @Author: xzh
 * @Descripttion: 表头动态字段源接口
 * @Param:
 */
export interface tableHeadAttr_Inf extends object_Inf {
  Title: string; //字段中文名称
  Name: string; //字段名
  FixAttr?: string; //是否固定属性
  Viewable?: string; //是否可见
  TextContent?: string; //表单样式
  Type?: string; //表单类型;
  align?: string; //对齐方式
  width?: number; //表格宽度
}

/**
 * @Author: xzh
 * @Descripttion: 鼠标配置项
 * @Param:
 */
export interface mouseConfig_Inf {
  selected: boolean; //开启单元格选中功能(只对 edit-config.mode=cell 有效)
}
/**
 * @Author: xzh
 * @Descripttion:行配置信息
 * @Param:
 */
export interface rowConfig_Inf {
  keyField: string; //	自定义行数据唯一主键的字段名（默认自动生成）
  isCurrent?: boolean; //	当鼠标点击行时，是否要高亮当前行
  isHover?: boolean; //	当鼠标移到行时，是否要高亮当前行
}
/**
 * @Author: xzh
 * @Descripttion:可编辑配置项
 * @Param:
 */
export interface editConfig_Inf {
  mode: string; //	编辑模式--cell(单元格编辑模式),row(行编辑模式)
  trigger?: string; //	触发方式
  autoClear?: boolean; //	自动关闭
}
/**
 * @Author: xzh
 * @Descripttion:树形结构配置项
 * @Param:
 */
export interface treeConfig_Inf {
  transform?: boolean; //自动将列表转为树结构（支持虚拟滚动
  line?: boolean; //树节点的连接线（启用连接线会降低渲染性能）
  rowField?: string; //树节点的字段名
  parentField?: string; //树父节点的字段名
  children?: string; //树子节点的字段名
  expandAll?: boolean; //默认展开所有子孙树节点
  expandRowKeys?: Array<string | number>; //默认展开指定行
  iconOpen?: string; //自定义展开图标
  iconClose?: string; //自定义收缩图标
}
/**
 * @Author: xzh
 * @Descripttion: 复选框配置项
 * @Param:
 */
export interface checkboxConfig_Inf extends object_Inf {
  reserve?: string; //是否保留勾选状态(需要有 row-config.keyField)
  trigger?: string; //触发方式->default(默认),cell(点击单元格触发),row(点击行触发)
}
/**
 * @Author: xzh
 * @Descripttion: 单选框配置项
 * @Param:
 */
export interface radioConfig_Inf extends object_Inf {
  reserve?: string; //是否保留勾选状态(需要有 row-config.keyField)
  trigger?: string; //触发方式->default(默认),cell(点击单元格触发),row(点击行触发)
}

/**
 * @Author: xzh
 * @Descripttion:回调事件
 * @Param:
 */
export interface emitEvents_Inf {
  //单元格(行)被点击时会触发该事件
  cellClick?: Function;
  //单元格(行)被双击时会触发该事件
  cellDblClick?: Function;
  //手动勾选并且值发生改变时触发的事件
  checkboxChange?: Function;
  //表格刷新回调时间
  refreshTable?: Function;
  //表格滚动时会触发该事件
  scroll?: Function;
  //工具栏按钮点击事件
  toolBtnClick?: Function;
  //当列宽拖动发生变化时会触发该事件
  resizableChange?: Function;
}

/**
 * @Author: xzh
 * @Descripttion:表格分页参数接口
 * @Param:
 */
export interface paginationParam_Inf {
  pagination: pagination_Inf;
  activePage: number; //当前活动页
  pageChange?: Function; //页码切换
}

/**
 * @Author: xzh
 * @Descripttion:分页参数
 * @Param:
 */
export interface pagination_Inf {
  page: number; //当前页
  rows: number; //页数量
  records: number; //总数
}

/**
 * @Author: xzh
 * @Descripttion:基础按钮接口
 * @Param:
 */
interface baseBtn_Inf {
  label: string; //按钮名
  code: string; //按钮code
  disabled?: boolean; //是否禁用
}

/**
 * @Author: xzh
 * @Descripttion: 按钮接口
 * @Param:
 */
interface tableTool_btn_Inf extends baseBtn_Inf {
  type?: string; //类型
  plain?: boolean; //是否为朴素按钮
}

/**
 * @Author: xzh
 * @Descripttion:表格工具栏按钮接口
 * @Param:
 */
export interface tableTool_Inf extends tableTool_btn_Inf {
  label: string; //按钮名
  code: string; //按钮code
  btnType: btnTypeEnum | string; //按钮类型
  icon?: any; //图标组件
  iconName?: string; //图标name
  dropdownArr?: Array<baseBtn_Inf>; //下拉菜单
  iconComponent?: any; //按钮组件
  value?: any; //值
  position?: string; //按钮位置
  customBehavior?: boolean; //自定义行为
}

/**
 * @Author: xzh
 * @Descripttion:按钮类型枚举
 * @Param:
 */
export enum btnTypeEnum {
  button = "button", //按钮
  dropdown = "dropdown", //下拉框
  refresh = "refresh", //刷新表格
  keyWordFilter = "keyWordFilter", //关键字筛选
}
